#include <stdio.h>

// 此例演示一些怪诞的赋值和逗号运算符
int main(void)
{
    int x, y, z;
    int houseprice;

    // 这个赋值以后是什么？
    // 首先括号里面是先左后右，先把y赋值为3，
    // 然后y自增1即4,在加2，赋值给z
    // 最后z + 5赋值为x
    x = (y = 3, (z = ++y + 2) + 5);
    printf("x = %d, y = %d, z = %d\n", x, y, z);

    // 下面的赋值语句可以编译通过？WTF
    // 可以的，逗号是逗号运算符，先执行左边，后执行右边
    // 这里等号优先级大于逗号运算符，所以逗号的两边分别是houseprice = 245和500
    // 于是这里把245赋值给houseprice
    // 然后执行500;这里是什么都不执行
    // 最后houseprice = 245
    houseprice = 245,500;
    printf("houseprice = %d\n", houseprice);

    // 下面的赋值语句可以编译通过？WTF
    // 可以的，和上面的一样，但是改变了优先级
    // 这里逗号的两边是245和500，
    // 先执行245，即什么都不执行
    // 然后执行500，结果就是把500赋值给houseprice
    // 最后houseprice = 500
    houseprice = (245,500);
    printf("houseprice = %d\n", houseprice);
    return 0;
}